iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 6
0
自我挑戰組

後端工程師自我練習,使用Node.js來做後端server系列 第 6

[Day-6] Node.js [使用Query Builder套件Knex.js執行資料庫語句]

  • 分享至 

  • xImage
  •  

[ Day 6 ]

說明:
在昨天介紹了使用mysql直連mysql資料庫,但下原生語句的方式一來對資料庫相依性太高
二來在程式碼中要管理一堆SQL語句字串,並不是很好維護。
因此今天來介紹knex.js這個Query Builder套件,簡化語句。

一、安裝knex

npm i knex --save

二、config配置與連線

knexDB.js
const knex = require('knex')({
  client: 'mysql',
  connection: {
    host : 'localhost',
    user : 'root',
    password : '123456',
    database : 'demo'
  }
});

這裡的client可以選擇所需要的database種類,包含mysql,oracle,sql server......等
另外需安裝過該資料庫的驅動(如day5所安裝的mysql)
如沒安裝,啟動時會產生error

三、查詢語句builder

knex('user').select('user_name')
    .then((projectNames) => {
      // console.log(projectNames)
      for(result in projectNames) {
        console.log(projectNames[result]);
      }
    }).catch((err) => {
      console.error(err)
    })

https://ithelp.ithome.com.tw/upload/images/20200919/20110911XxJYzeiblW.png

加上where條件

knex('user').select('*').
    where({
      user_name: 'cat'
    })

https://ithelp.ithome.com.tw/upload/images/20200919/20110911F9aDTBIH8I.png

複合where條件

knex('user')
  .select('*')
  .leftJoin('user_ii', 'user.user_id', 'user_ii.user_id')
  .where('user.user_id', '<' , '16')
  .andWhere((builder) => {
    builder.whereIn('gender', ['2','3','4'])
  })

在where的後面再串上andwhere,但裡面是一個where in 的查詢條件
所以要傳入一個innner function 有builder參數,再進行wherein查詢

四、insert資料

knex('user')
    .insert({user_name: 'knexUserName'})
    .then(result => {
      console.log(result)
    })

回傳主鍵值
https://ithelp.ithome.com.tw/upload/images/20200919/20110911Y37qDpesa1.png

五、update資料

knex('user')
  .where('user_id', '16')
  .update({
    user_name: 'zhang',
  }).then(result => {
    console.log(result)
  })

https://ithelp.ithome.com.tw/upload/images/20200919/20110911PHFmWQEKXs.png

六、刪除資料

knex('user')
  .where('user_id', '16')
  .del()
  .then(result => {
    console.log(result)
  })

https://ithelp.ithome.com.tw/upload/images/20200919/20110911VMswASJvkS.png

七、table join

knex('user')
  .select('*')
  .leftJoin('user_ii', 'user.user_id', 'user_ii.user_id')
  .then((projectNames) => {
        for(result in projectNames) {
          console.log(projectNames[result]);
        }
      }).catch((err) => {
        console.error(err)
      })

https://ithelp.ithome.com.tw/upload/images/20200919/20110911SPeKsRVmCF.png

詳細語句的方法可以在官網找到
參考來源:http://knexjs.org/

Day6結束


上一篇
[Day-5] Node.js [使用mysql原生語句連結資料庫]
下一篇
[Day-7] Node.js [使用Express套件建立REST API]
系列文
後端工程師自我練習,使用Node.js來做後端server30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言